// 定义类型

// 布尔值
let isDone: boolean = false;

// 数值类型
let num: number = 1;

// 字符串
let myName: string = "XR";

// 模板字符串
let str: string = `hello, my name is ${myName}`

// 定义空值void (无返回值)
function alterName(): void {
	alert(str)
}

// 定义空值， 仅可使用空值
let unusable: void;

// null、undefined
let n: null = null;
let u: undefined = undefined;

// 任意值
let anyInfo: any = "seven";
anyInfo = 7;

// 联合类型
let myFavoriteNumber: string | number;
myFavoriteNumber = "nu";
myFavoriteNumber = 1;

// 联合类型参数
function getLength(something: string | number): string {
	return something.toString()
}

// 类型推论
// 若TypeScript 会在没有明确的指定类型的时候推测出一个类型，这就是类型推论。
// 如果定义的时候没有赋值，不管之后有没有赋值，都会被推断成 any 类型而完全不被类型检查：
let myFavoriteNumber2;
myFavoriteNumber2 = 'seven';
myFavoriteNumber2 = 7;

// 类型推断 数组
let arr1_A = ["雨落"]
arr1_A.push("山涧")

// 类型推断 数组 错误示例
// 未手动设置类型的数组会以第一条数据推断设置类型
// arr1_A.push(123)

// 类型推断 对象
let user = { name: "雨落", age: 25, open: false }
user.age = 30